<?php
namespace app\queue\controller;


use app\BaseController;
use think\facade\View;
use think\facade\Cache;
use think\facade\Queue;
use think\facade\Db;
 
use think\exception\ValidateException;
use think\facade\Log;
 
use think\facade\Config;
use app\job\Order as  queueOrder;

use app\queue\model\Order as orderModel;
use app\queue\model\LbxBranch as LbxBranchModel;
use app\queue\model\settlementStatistical as StatisticalModel;

class Index extends BaseController
{
    
 
 
    
    

     /**
     * [月结订单]
     * @param  string      数据 [推送数据]
     * @return [type]            [description]
     */
    public function orderDownload($data=array())
    {

        
        empty($data)?$data=input():$data;
    

        

    
        $orderModel = new orderModel();         // orderModel 实例化
        $LbxBranchModel = new LbxBranchModel(); // LbxBranchModel 实例化
        $StatisticalModel = new StatisticalModel(); // StatisticalModel 实例化




        // 获取type 用于区分订单下载
        $type = !empty($data['type'])?$data['type']:'';
        if(empty($type)){
            write_log('error-type未获取到',$type,'orderDownload');
            $this->ajaxreturn(400,'type不能为空');
        };

        switch ($type) {
            case 'MinuteOrder':  // 每五分钟更新一次订单数据
                $branch_id = isset($data['branch_id'])?$data['branch_id']:'';
                // 查询 appkey和sercret
                $branch = $LbxBranchModel->get_branch($branch_id);
                empty($branch)?$this->ajaxreturn(400,'联盟不存在'):'';
                foreach ($branch as $k => $v) {
                    $start_time = strtotime("-5 minute"); // 5分钟以前日期;
                    $end_time = time();
                    
                    // 每个月创建一个表 如果没有创建
                    $month = date("n",time());
                    $t_name = 'vi_lbx_'.$v['branch_union_id'].'_'.$month.'_tbk_orders';
                    $t_create = $orderModel->table_has($t_name);

                    // // 用于计算进度条创建一个key用于存循环数量
                    // $red_key = $start_time.'_'.$end_time;
                    // cache::set('processKey',$red_key); // 计算进度存key
                    // cache::set($red_key.'.processNum',0);  // 默认清除循环次数
                    
                    $data['appkey']       =  $v['appkey'];
                    $data['secretkey']    =  $v['secretkey'];
                    $data['branch_union_id']    =  $v['branch_union_id'];
                    $data['t_name'] = $t_name;
                    $data['query_type'] = 1;  // 每分钟更新的话 按照订单创建时间查询

                    $perform_time    = date("Yn",$start_time);
                    $data['perform_time'] = $perform_time; // 结算月份


                    $info = $this->param_arr($data,$type);  // 组装数据
                    // 按照时间循环推送数据
                    $start = date("Y-m-d H:i:s",$start_time);
                    $end   = date("Y-m-d H:i:s",$end_time);

                    $info['start_time'] = date("Y-m-d H:i:s",$start_time);
                    $info['end_time'] = date("Y-m-d H:i:s",$end_time);
                    $res = queueOrder::publish($info['queName'],$info,1);
                    if($res !== false ){  
                        $code = 200;
                        $msg = '开始时间:'.$start.'结束时间:'.$end . "信息加入列队成功";

                    }else{
                        $code = 400;
                        $msg = '开始时间:'.$start.'结束时间:'.$end .'信息加入列队失败';
                    };
                }

                break;
            case 'YueOrder': // 月订单下载



                $branch_id = isset($data['branch_id'])?$data['branch_id']:'';
                // 查询 appkey和sercret
                $branch = $LbxBranchModel->get_branch($branch_id);
                empty($branch)?$this->ajaxreturn(400,'联盟不存在'):'';

                foreach ($branch as $k => $v) {
                    // 获取上个月第一天和最后一天
                    $befor_start = strtotime(date('Y-m-d',strtotime('first day of last month')));
                    $befor_end   = strtotime(date('Y-m-d',strtotime('last day of last month')))+86400;
                    $start_time = isset($data['start_time'])?$data['start_time']:$befor_start;
                    $end_time = isset($data['end_time'])?$data['end_time']:$befor_end;
 
                    // 每个月创建一个表 如果没有创建
                    $month = date("n",strtotime(" -1 month"));
                    $t_name = 'vi_lbx_'.$v['branch_union_id'].'_'.$month.'_tbk_orders';
                    $t_create = $orderModel->table_has($t_name);

                    
                    $data['appkey']       =  $v['appkey'];
                    $data['secretkey']    =  $v['secretkey'];
                    $data['branch_union_id']    =  $v['branch_union_id'];
                    $data['t_name'] = $t_name;
                    $data['tk_status'] = '3';  // 每分钟更新的话 按照订单创建时间查询

                    
                    // 记录执行百分比
                    $perform_time    = date("Yn",$start_time);
                    $StatisticalModel->add_percentage($start_time,$end_time,$data['branch_union_id'],$t_name,$perform_time);


                    $data['perform_time'] = $perform_time; // 结算月份


                    $info = $this->param_arr($data,$type);  // 组装数据

                    // 按照时间循环推送数据
                    while ($start_time < $end_time) {
                        // 循环计算开始时间和结束时间
                        $start = date("Y-m-d H:i:s",$start_time);
                        $end  = date("Y-m-d H:i:s",strtotime(date("Y-m-d H:i:s",$start_time)." +20 minutes"));

                        $info['start_time'] = $start;
                        $info['end_time'] = $end;
                        $res = queueOrder::publish($info['queName'],$info,1);
                        if($res !== false ){  
                            $code = 200;
                            $msg = '开始时间:'.$start.'结束时间:'.$end . "信息加入列队成功";

                        }else{
                            $code = 400;
                            $msg = '开始时间:'.$start.'结束时间:'.$end .'信息加入列队失败';
                        };
                        $start_time = $start_time+1200;
                    }
                }
                break;
        }


        $this->ajaxreturn($code,$msg,array());
    }


    /**
     * 组装数据
     */
    public function param_arr($data,$type){
         switch ($type) {
            case 'MinuteOrder'||'YueOrder':
                //跳转类型，当向前或者向后翻页必须提供,-1: 向前翻页,1：向后翻页
                $jump_type  =  !empty($data['jump_type'])?$data['jump_type']:1;
                //页大小，默认20，1~100
                $page_size = !empty($data['page_size'])?$data['page_size']:100;
                //secretkey Number  false   1   查询时间类型，1：按照订单淘客创建时间查询，2:按照订单淘客付款时间查询，3:按照订单淘客结算时间查
                $query_type = !empty($data['query_type'])?$data['query_type']:'3';
                //推广者角色类型,2:二方，3:三方，不传，表示所有角色
                $member_type = !empty($data['member_type'])?$data['member_type']:'';
                //淘客订单状态，12-付款，13-关闭，14-确认收货，3-结算成功;不传，表示所有状态
                $tk_status = !empty($data['tk_status'])?$data['tk_status']:'';
                //订单场景类型，1:常规订单，2:渠道订单，3:会员运营订单，默认为1，通过设置订单场景类型，媒体可以查询指定场景下的订单信息，例如不设置，或者设置为1，表示查询常规订单，常规订单包含淘宝客所有的订单数据，含渠道，及会员运营订单，但不包含3方分成，及维权订单
                $order_scene  =  !empty($data['order_scene'])?$data['order_scene']:1;
                //第几页，默认1，
                $page_no = !empty($data['page_no'])?$data['page_no']:1;
                //位点，除第一页之外，都需要传递；前端原样返回。
                $position_index = !empty($data['position_index'])?$data['position_index']:'';
                // 队列名称
                $queName = !empty($data['type'])?$data['type']:'YueOrder';
                // 信息id
                $branch_id = !empty($data['branch_id'])?$data['branch_id']:'2';

                // 拼组淘宝同步数据
                $info = array(
                    'appkey'=>$data['appkey'],
                    'secretKey'=>$data['secretkey'],
                    'page_size'=>$page_size,
                    'query_type'=>$query_type,
                    'jump_type'=>$jump_type,
                    'member_type'=>$member_type,
                    'tk_status'=>$tk_status,
                    'order_scene'=>$order_scene,
                    'position_index' => $position_index,
                    'page_no' => $page_no,
                    'branch_id' => $branch_id,
                    'queName' => $queName,
                    'branch_union_id' => $data['branch_union_id'],
                    't_name' => $data['t_name'],
                    'perform_time' => $data['perform_time']

                    
                );
            break;
            
            case 'test':  // 淘宝月订单结算
             
            break;

        };

        return $info;
       


    }



     /**
     * 获取月结算进度
     *
     * @method POST
     * @desc public
     */
     public function orderProcess($start_time,$end_time){
        $res_arr = array();

        $key = Cache::get('processKey');
        $num =Cache::get($key.'.processNum'); 
        $time = explode('_',$key);
        $start_time  = $time[0];
        $end_time    = $time[1];
  
        $minute=($end_time-$start_time)/1200;
        $percentage =  ceil($num/$minute*100);
        if($percentage>100){
            $res_arr['percentage'] = 100;
        }else{
            $res_arr['percentage'] = $percentage;
        }
        $this->ajaxreturn(200,'success',$res_arr);
        

     }








     /**
     * 测试接口
     *
     * @desc 获取身份信息
     * @method POST
     * @param  appkey    (必传)
     * @param  secretkey 结束时间    (必传)
     * @param  start_time 开始时间 (必传)
     * @param  end_time 结束时间     (必传)
     * @param  query_type 节点    （默认1）
     * @param  jump_type 跳转类型，当向前或者向后翻页必须提供,-1: 向前翻页,1：向后翻页（默认1）
     * @param  page_size 淘宝每页返回条数，默认100，1~100（默认100条）
     * @param  member_type 推广者角色类型,2:二方，3:三方，不传，表示所有角色  (默认所有角色）
     * @param  tk_status 淘客订单状态，12-付款，13-关闭，14-确认收货，15-结算成功;不传，表示所有状态 (默认表示所有状态）
     * @param  order_scene 订单场景类型，1:常规订单，2:渠道订单，3:会员运营订单，默认为1，通过设置订单场景类型，媒体可以查询指定场景下的订单信息，例如不设置，或者设置为1，表示查询常规订单，常规订单包含淘宝客所有的订单数据，含渠道，及会员运营订单，但不包含3方分成，及维权订单(默认1）
     * @desc public
     */
    public function test(){



        $req = input();
        // try {
        //     validate(Order::class)->check($req);
        // } catch (ValidateException $e) {
        //     // 验证失败 输出错误信息
        //     $this->ajaxreturn(400,$e->getError());
        // };

         // 每个月创建一个表 如果没有创建
        // $month = date("Ym",strtotime(" -1 month"));
        // $t_name = 'vi_lbx_125115330_tbk_orders_'.$month;
        //  $orderModel = new orderModel(); // model 实例化
        // $t_create = $orderModel->table_has($t_name); 


            //     $data = array(
            // 'appkey'=>'24621156',
            // 'secretkey'=>'0bb03f8580bee64c5a03e50a67f3e222',
            // 'start_time'=>'1585544400',
            // 'end_time'=>  '1585545600'  // 1583044800
            // );


        // $appkey       =  $req['appkey'];
        // $secretkey    =  $req['secretkey'];
        // $start_time = $req['start_time'];
        // $end_time = $req['end_time'];

        $orderModel = new orderModel();         // orderModel 实例化

        //跳转类型，当向前或者向后翻页必须提供,-1: 向前翻页,1：向后翻页
        $jump_type  =  !empty($req['jump_type'])?$req['jump_type']:1;
        //页大小，默认20，1~100
        $page_size = !empty($req['page_size'])?$req['page_size']:100;
        //secretkey Number  false   1   查询时间类型，1：按照订单淘客创建时间查询，2:按照订单淘客付款时间查询，3:按照订单淘客结算时间查
        $query_type = !empty($req['query_type'])?$req['query_type']:'1';
        //推广者角色类型,2:二方，3:三方，不传，表示所有角色
        $member_type = !empty($req['member_type'])?$req['member_type']:'';
        //淘客订单状态，12-付款，13-关闭，14-确认收货，15-结算成功;不传，表示所有状态
        $tk_status = !empty($req['tk_status'])?$req['tk_status']:'3';
        //订单场景类型，1:常规订单，2:渠道订单，3:会员运营订单，默认为1，通过设置订单场景类型，媒体可以查询指定场景下的订单信息，例如不设置，或者设置为1，表示查询常规订单，常规订单包含淘宝客所有的订单数据，含渠道，及会员运营订单，但不包含3方分成，及维权订单
        $order_scene  =  !empty($req['order_scene'])?$req['order_scene']:1;
        //第几页，默认1，
        $page_no = !empty(input('page_no'))?input('page_no'):1;
        //位点，除第一页之外，都需要传递；前端原样返回。
        $position_index = !empty(input('position_index'))?input('position_index'):'';
        $data = array (
          'appkey' => '24621156',
          'secretKey' => '0bb03f8580bee64c5a03e50a67f3e222',
          'page_size' => 100,
          'query_type' => 1,
          'jump_type' => 1,
          'member_type' => '',
          'tk_status' => '',
          'order_scene' => 1,
          'position_index' => '',
          'page_no' => 1,
          'queName' => 'orderTb',
          'start_time' => '2020-04-15 17:00:00',
          'end_time' => '2020-04-15 17:21:49',
        );
        // $data = array(
        //             'appkey'=>$appkey,
        //             'secretKey'=>$secretkey,
        //             'start_time'=>date("Y-m-d H:i:s",$start_time),
        //             'end_time'=>date("Y-m-d H:i:s",$end_time),
        //             'page_size'=>$page_size,
        //             'query_type'=>$query_type,
        //             'jump_type'=>$jump_type,
        //             'member_type'=>$member_type,
        //             'tk_status'=>$tk_status,
        //             'order_scene'=>$order_scene,
        //             'position_index' => $position_index,
        //             'page_no' => $page_no
        //             );
         $return_json = $orderModel->get_order($data);
         // $res = $orderModel->orderUpdate($return_json['data']);



         p($return_json);
    }
    
     

   
}
